package com.lxx.jmb2c.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

/**
 * RestTemplate配置类
 * 
 * 配置Spring的HTTP客户端RestTemplate，用于：
 * 1. 调用外部REST API服务
 * 2. 微服务间通信
 * 3. 与第三方系统集成
 * 
 * 重要说明：
 * - RestTemplate在Spring 5.0后已标记为@Deprecated
 * - 新项目建议使用WebClient(响应式非阻塞)
 * - 但现有项目仍可继续使用
 * 
 * 性能调优建议：
 * 1. 配置连接池(使用HttpComponentsClientHttpRequestFactory)
 * 2. 设置合理的超时时间
 * 3. 启用GZIP压缩
 * 4. 考虑使用缓存
 * 
 * 安全注意事项：
 * 1. 对外部API调用要验证SSL证书
 * 2. 敏感数据要加密传输
 * 3. 设置合理的重试策略
 * 
 * 初学者需要了解：
 * - @Configuration 表示这是一个配置类
 * - @Bean 表示这个方法返回的对象会被Spring容器管理
 * - RestTemplate是线程安全的，可以全局共享
 * 
 * 使用示例：
 * @Autowired
 * private RestTemplate restTemplate;
 * 
 * // GET请求
 * String result = restTemplate.getForObject(url, String.class);
 * 
 * // POST请求
 * ResponseEntity<String> response = restTemplate.postForEntity(url, request, String.class);
 * 
 * @author lxx
 * @since 2025-07-02
 */
@Configuration
public class RestTemplateConfig {
    /**
     * 配置RestTemplate Bean
     * 
     * 默认实现特点：
     * - 使用SimpleClientHttpRequestFactory
     * - 没有连接池
     * - 没有超时设置
     * 
     * 生产环境建议：
     * 1. 使用HttpComponentsClientHttpRequestFactory
     * 2. 配置连接池参数
     * 3. 设置合理的超时时间
     * 
     * @return 配置好的RestTemplate实例
     */
    @Bean
    public RestTemplate restTemplate() {
        // 生产环境应该配置连接池和超时
        // ClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        // ((HttpComponentsClientHttpRequestFactory)factory).setConnectTimeout(5000);
        // return new RestTemplate(factory);
        
        return new RestTemplate();
    }
}
